home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 4
/
FM Towns Free Software Collection 4 - Disc 1.iso
/
t_os
/
tie
/
src
/
screen.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-10-18
|
8KB
|
355 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include <egb.h>
#include <mos.h>
#include <msdos.cf>
#include "tie.h"
/*
typedef struct
{
int b, r, g ;
} PALET ;
*/
void DSP_writePage( char *work, int page )
{
EGB_writePage( work, page ) ;
if( page == 0 )
writepage = PAGE0 ;
else
writepage = PAGE1 ;
}
void cls( int page, int color ) /* 画面クリア */
{
DSP_writePage( egbwork, page ) ;
EGB_color( egbwork, 1, color ) ;
EGB_clearScreen( egbwork ) ;
}
void set_palette( int color, int b, int r, int g )
{
struct
{
int num ;
int col ;
u_char b, r, g, dum ;
} para ;
para.num = 1 ;
para.col = color ;
para.r = r ;
para.g = g ;
para.b = b ;
para.dum = 0 ;
EGB_palette( egbwork, 0, (char *)¶ ) ;
}
void dsp_ptn( int x, int y, char *ptn, int color )
{
struct
{
char *ptn ;
short int sel ;
short int x1, y1 ;
short int x2, y2 ;
} para ;
para.ptn = ptn ;
para.sel = getds() ;
para.x1 = x ;
para.y1 = y ;
para.x2 = x + 31 ;
para.y2 = y + 31 ;
EGB_color( egbwork, 0, color ) ;
EGB_putBlockColor( egbwork, 0, (char *)¶ ) ;
}
void DSP_ptn( int x, int y, int xsiz, int ysiz, char *ptn, int color )
{
struct
{
char *ptn ;
short int sel ;
short int x1, y1 ;
short int x2, y2 ;
} para ;
para.ptn = ptn ;
para.sel = getds() ;
para.x1 = x ;
para.y1 = y ;
para.x2 = x + xsiz ;
para.y2 = y + ysiz ;
EGB_color( egbwork, 0, color ) ;
EGB_putBlockColor( egbwork, 0, (char *)¶ ) ;
}
void dsp_box( int x1, int y1, int x2, int y2,
int forcol, int bakcol, int boxcol )
{
struct {
short int x1, y1, x2, y2 ;
} line ;
struct {
short int count ;
short int x1, y1, x2, y2, x3, y3 ;
} connect ;
EGB_linePattern( egbwork, 1, 0xFFFFFFFF ) ;
line.x1 = x1 ;
line.y1 = y1 ;
line.x2 = x2 ;
line.y2 = y2 ;
EGB_paintMode( egbwork, 0x022 ) ;
EGB_color( egbwork, 0, forcol ) ;
EGB_color( egbwork, 2, boxcol ) ;
EGB_rectangle( egbwork, (char *)&line ) ;
if( forcol == bakcol )
return ;
connect.count = 3 ;
connect.x1 = x1 ;
connect.y1 = y2 ;
connect.x2 = x2 ;
connect.y2 = y2 ;
connect.x3 = x2 ;
connect.y3 = y1 ;
EGB_color( egbwork, 0, bakcol ) ;
EGB_connect( egbwork, (char *)&connect ) ;
}
void DSP_clip_on( register EVENT *ep )
{
struct
{
char *ptn ;
short int sel ;
short int x1, y1 ;
short int x2, y2 ;
} para ;
struct
{
short int count ;
short int x1,y1, x2,y2, x3,y3 ;
} connect ;
int n ;
char *ptn ;
n = (ep->x2 - ep->x1 + 7) * (ep->y2 - ep->y1 + 1) / 8 * 4 ;
if( ( ptn = (char *)malloc( n ) ) == NULL )
return ;
MOS_disp(FALSE);
para.ptn = ptn;
para.sel = getds();
para.x1 = ep->x1;
para.y1 = ep->y1;
para.x2 = ep->x2-1;
para.y2 = ep->y2-1;
EGB_getBlock(egbwork,(char *)¶);
para.ptn = ptn;
para.sel = getds();
para.x1 = ep->x1+1;
para.y1 = ep->y1+1;
para.x2 = ep->x2;
para.y2 = ep->y2;
EGB_putBlock(egbwork,0,(char *)¶);
connect.count = 3;
connect.x1 = ep->x1;
connect.y1 = ep->y2;
connect.x2 = ep->x1;
connect.y2 = ep->y1;
connect.x3 = ep->x2;
connect.y3 = ep->y1;
EGB_linePattern( egbwork, 1, 0xFFFFFFFF ) ;
EGB_color(egbwork,0,0);
EGB_connect(egbwork,(char *)&connect);
MOS_disp(TRUE);
free(ptn);
}
void DSP_clip_off( register EVENT *ep )
{
struct {
char *ptn;
short int sel;
short int x1,y1;
short int x2,y2;
} para;
struct {
short int count;
short int x1,y1,x2,y2,x3,y3;
} connect;
int n;
char *ptn;
n = (ep->x2 - ep->x1 + 7) * (ep->y2 - ep->y1 + 1) / 8 * 4 ;
if( ( ptn = (char *)malloc( n ) ) == NULL )
return ;
MOS_disp(FALSE);
para.ptn = ptn;
para.sel = getds();
para.x1 = ep->x1+1;
para.y1 = ep->y1+1;
para.x2 = ep->x2;
para.y2 = ep->y2;
EGB_getBlock(egbwork,(char *)¶);
para.ptn = ptn;
para.sel = getds();
para.x1 = ep->x1;
para.y1 = ep->y1;
para.x2 = ep->x2-1;
para.y2 = ep->y2-1;
EGB_putBlock(egbwork,0,(char *)¶);
connect.count = 3;
connect.x1 = ep->x1;
connect.y1 = ep->y2;
connect.x2 = ep->x2;
connect.y2 = ep->y2;
connect.x3 = ep->x2;
connect.y3 = ep->y1;
EGB_linePattern( egbwork, 1, 0xFFFFFFFF ) ;
EGB_color(egbwork,0,8);
EGB_connect(egbwork,(char *)&connect);
MOS_disp(TRUE);
free(ptn);
}
void chg_palette( int page, int num )
{
typedef struct
{
long num ;
struct
{
int col ;
u_char b, r, g, dum ;
} rgb[16] ;
} TABLE ;
TABLE palet[3] = {
{ 16, {
{ 0, 0, 0, 0},{ 1, 0, 0, 0},{ 2, 0, 96, 0},{ 3, 96, 96, 0},
{ 4, 0, 0, 96},{ 5, 96, 0, 96},{ 6, 0,144,144},{ 7,128,128,128},
{ 8,64, 64, 64},{ 9,192, 0, 0},{10, 0,192, 0},{11,192,192, 0},
{12, 0, 0,192},{13,192, 0,192},{14,230,230,230},{15,192,192,192}, }, },
{ 16, {
{ 0, 0, 0, 0},{ 1, 0, 0, 0},{ 2, 0, 32, 0}, { 3, 32, 32, 0},
{ 4, 0, 0, 32},{ 5, 32, 0, 32},{ 6, 0, 32, 32}, { 7, 32, 32, 32},
{ 8,16, 16, 16},{ 9, 64, 0, 0},{10, 0, 64, 0}, {11, 64, 64, 0},
{12, 0, 0, 64},{13, 64, 0, 64},{14, 96, 96, 96}, {15, 64, 64, 64}, }, },
{ 16, {
{ 0, 0, 0, 0},{ 1, 0, 0, 0},{ 2, 0,128, 0},{ 3,128,128, 0},
{ 4, 0, 0,128},{ 5,128, 0,128},{ 6, 0,128,128},{ 7,128,128,128},
{ 8,64, 64, 64},{ 9,200, 0, 0},{10, 0,200, 0},{11,200,200, 0},
{12, 0, 0,200},{13,200, 0,200},{14,255,255,255},{15,230,230,230}, }, },
} ;
DSP_writePage( egbwork, page ) ;
EGB_palette( egbwork, 0, (char *)&palet[num] ) ;
}
/* x1,y1 - x2,y1 - x2,y2 - x1,y2 の四角を書く */
void box( int x1, int y1, int x2, int y2, int color, int pattern, int mode )
{
struct {
short int count ;
short int x1,y1, x2,y2, x3,y3, x4,y4, x5,y5 ;
} connect ;
EGB_color( egbwork, 0, color ) ;
EGB_linePattern( egbwork, 0, pattern ) ;
EGB_writeMode( egbwork, mode ) ;
connect.count = 5 ;
connect.x1 = x1 ;
connect.y1 = y1 ;
connect.x2 = x2 ;
connect.y2 = y1 ;
connect.x3 = x2 ;
connect.y3 = y2 ;
connect.x4 = x1 ;
connect.y4 = y2 ;
connect.x5 = x1 ;
connect.y5 = y1 ;
EGB_connect( egbwork, (char *)&connect ) ;
EGB_writeMode( egbwork, MODE_PSET ) ;
}
void box2( int x1, int y1, int x2, int y2, int color1, int color2 )
{
struct {
short int count ;
short int x1,y1, x2,y2, x3,y3 ;
} connect ;
EGB_linePattern( egbwork, 0, 0xFFFFFFFF ) ;
connect.count = 3 ;
connect.x1 = x2 ;
connect.y1 = y1 ;
connect.x2 = x1 ;
connect.y2 = y1 ;
connect.x3 = x1 ;
connect.y3 = y2 ;
EGB_color( egbwork, 0, color1 ) ;
EGB_connect( egbwork, (char *)&connect ) ;
connect.count = 3 ;
connect.x1 = x2 ;
connect.y1 = y1 ;
connect.x2 = x2 ;
connect.y2 = y2 ;
connect.x3 = x1 ;
connect.y3 = y2 ;
EGB_color( egbwork, 0, color2 ) ;
EGB_connect( egbwork, (char *)&connect ) ;
}
void getputBlock( int x1, int y1, int x2, int y2, char *ptn, int flag )
{
static struct {
char *ptn ;
short int sel ;
short int x1, y1 ;
short int x2, y2 ;
} para ;
para.x1 = x1 ;
para.x2 = x2 ;
para.y1 = y1 ;
para.y2 = y2 ;
para.ptn = ptn ;
para.sel = getds() ;
if( flag == TRUE )
EGB_getBlock( egbwork, (char *)¶ ) ;
else
EGB_putBlock( egbwork, 0, (char *)¶ ) ;
}